
$jq(document).ready(function() {
	adicionarTabelaArquivosDeployTela();
	
	

	// Clique no botão: Novo Arquivo/Pasta para Deploy
	$jq("a#botaoAddLinhaTabelaNovoArquivosDeploy").on("click", function(evt) {
		evt.preventDefault();
		evt.stopPropagation();
		
		// Remove a linha que informa que não existem arquivos para deploy.
		$jq("#linhaTabelaInfoSemArquivosDeploy").remove();
		// Adiciona a linha com os campos para preenchimento dos dados do arquivo para deploy
		$jq("#tabelaArquivosDeploy").append(linhaTabelaCamposAdicionarNovoArquivoDeploy);
		// Esconde o botão que adiciona a linha com os campos para preenchimento dos dados do arquivo para deploy
		$jq("a#botaoAddLinhaTabelaNovoArquivosDeploy").hide();
		
		// Clique no link: Adicionar -> Adiciona o novo arquivo à tabela de arquivos para deploy;
		$jq("#linkAddNovoArquivoDeploy").on("click", function(evt) {
			evt.preventDefault();
			evt.stopPropagation();
			
			// Verifica que se já existe algum arquivo adicionado para colocar o separador de fim de linha, indicando um novo arquivo
			if ($jq(seletorTextoArquivosDeploy).val() != "") {
				$jq(seletorTextoArquivosDeploy).val($jq(seletorTextoArquivosDeploy).val() + separadorPosicionalLinhasArquivosDeploy);
			} 
			
			// Preenche o campo: Arquivos para Deploy com os dados do novo arquivo, mantendo os arquivos anteriores
			$jq(seletorTextoArquivosDeploy).val(
				$jq(seletorTextoArquivosDeploy).val() +
				$jq("#textoNomeArtefato").val() + separadorPosicionalCamposArquivosDeploy +
				$jq("#comboTipoDeploy").valorSelecionado() + separadorPosicionalCamposArquivosDeploy +
				$jq("#textoDotNotation").val() + separadorPosicionalCamposArquivosDeploy +
				$jq("#textoVersao").val() + separadorPosicionalCamposArquivosDeploy +
				$jq("#textoUrlStarTeam").val()
			);
			
			// Remove as linhas com os arquivos para deploy já adicionados.
			$jq("tr#linhaArquivoDeployAdicionado").remove();
			// Carrega na tabela os arquivos para deploy com o novo arquivo adicionado
			apresentarLinhasTabelaArquivosDeployCadastrados($jq(seletorTextoArquivosDeploy).val());
		});
	});
});


var separadorPosicionalCamposArquivosDeploy = "#";
var separadorPosicionalLinhasArquivosDeploy = "!";

var linkNovoArquivoDeploy = "<td><a href='' id='botaoAddLinhaTabelaNovoArquivosDeploy' class='botao_especial'>Novo Arquivo/Pasta para Deploy<a><td>";
var textoNovoArquivoDeploy = "NOME DO ARTEFATO (ARQUIVO OU PASTA): \n\nTIPO DE DEPLOY: \n\nDOT NOTATION: \n\nVERSÃO: \n\nURL STARTEAM: \n------------------------------";

var tabelaArquivosDeploy = 
	'<table border="1" class="tabela_grade" id="tabelaArquivosDeploy">'  + 
		'<tr id="header_tabela">' + 
			'<th>Nome do Artefato<br/>(Arquivo ou Pasta)</th>' + 
			'<th>Tipo de Deploy<sup><font color="red">0</font></sup></th>' + 
			'<th>Dot notation<sup><font color="red">1, 2</font></sup></th>' + 
			'<th>Versão<sup><font color="red">3</font></sup></th>' + 
			'<th>URL StarTeam</th>' + 
			'<th>Ações</th>' + 
		'</tr>' + 
		'<tr id="linhaTabelaInfoSemArquivosDeploy">' +
		'<td colspan="100%" style="text-align:center;">Sem arquivos para deploy</td>' +
		'</tr>' + 
	'</table>' +
	'<sup><font color="red"><b>0</b></font></sup> Informar se Aplicação ou Biblioteca;<br/>' + 
	'<sup><font color="red"><b>1</b></font></sup> Dot notation é obrigatório quando não for informada Baseline Source OU deploy de projeto Delphi;<br/>' + 
	'<sup><font color="red"><b>2</b></font></sup> Dot notation não é necessário quando o Artefato for do tipo Pasta (comum em deploy de aplicação PHP);<br/>' + 
	'<sup><font color="red"><b>3</b></font></sup> Versão que poderá ser identificada na tela inicial ao executar a aplicação/sistema.<br/>' +
	'<br/>';

var linhaTabelaSemArquivoDeploy =
	'<tr id="linhaTabelaInfoSemArquivosDeploy">' +
		'<td colspan="100%" style="text-align:center;">Sem arquivos para deploy</td>' +
	'</tr>';

var linhaTabelaCamposAdicionarNovoArquivoDeploy =
	'<tr id="linhaTabelaCamposAdicionarNovoArquivoDeploy">' +
		'<td>' +
			'<input type="text" id="textoNomeArtefato">' +
		'</td>' +
		'<td>' +
			'<select id="comboTipoDeploy">' +
				'<option value="app">Aplicação</option>' +
				'<option value="lib">Biblioteca</option>' +
			'</select>' +
		'</td>' +
		'<td>' +
			'<input type="text" id="textoDotNotation">' +
		'</td>' +
		'<td>' +
			'<input type="text" id="textoVersao">' +
		'</td>' +
		'<td>' +
			'<input type="text" id="textoUrlStarTeam">' +
		'</td>' +
		'<td>' +
			'<a href="" id="linkAddNovoArquivoDeploy">Adicionar</a>' +
		'</td>' +
	'</tr>';

var linhaTabelaCamposEditarArquivoDeploy =
	'<tr id="linhaTabelaCamposEditarArquivoDeploy">' +
		'<td>' +
			'<input type="text" id="textoNomeArtefato">' +
		'</td>' +
		'<td>' +
			'<select id="comboTipoDeploy">' +
				'<option value="app">Aplicação</option>' +
				'<option value="lib">Biblioteca</option>' +
			'</select>' +
		'</td>' +
		'<td>' +
			'<input type="text" id="textoDotNotation">' +
		'</td>' +
		'<td>' +
			'<input type="text" id="textoVersao">' +
		'</td>' +
		'<td>' +
			'<input type="text" id="textoUrlStarTeam">' +
		'</td>' +
		'<td>' +
			'<a href="" id="linkEditarArquivoDeploy">Salvar</a>' +
		'</td>' +
	'</tr>';

var templateLinhaTabelaArquivoDeploy =
	'<tr id="linhaArquivoDeployAdicionado">' +
		'<td>' +
			'{0}' +
		'</td>' +
		'<td>' +
			'{1}' +
		'</td>' +
		'<td>' +
			'{2}' +
		'</td>' +
		'<td>' +
			'{3}' +
		'</td>' +
		'<td>' +
			'{4}' +
		'</td>' +
		'<td>' +
		'<a href="" id="editarArquivoDeployTemplate">Editar</a> -' +
		' <a href="" id="excluirArquivoDeployTemplate">Excluir</a>' +
		'</td>' +
	'</tr>';

function adicionarTabelaArquivosDeployTela() {
	$jq(seletorTextoArquivosDeploy).closest("td").append(tabelaArquivosDeploy);
	$jq(seletorTextoArquivosDeploy).closest("td").append(linkNovoArquivoDeploy);
}

function apresentarLinhasTabelaArquivosDeployCadastrados(dados) {

	// Pega as linhas que representam os arquivos para deploy do campo texto Arquivos para Deploy
	var linhasArquivosAdicionadosDeploy = dados.split(separadorPosicionalLinhasArquivosDeploy);
	
	// Se não existirem arquivo a serem apresentados na tabela, carrega a linha com a mensagem: Sem Arquivos para Deploy
	if (linhasArquivosAdicionadosDeploy == "") {
		$jq("#tabelaArquivosDeploy").append(linhaTabelaSemArquivoDeploy);
		return;
	}

	// Itera pelas linhas para apresentar na tabela
	for (var i = 0; i < linhasArquivosAdicionadosDeploy.length; i++) {
		var templateNovaLinhaTabelaArquivoDeploy = templateLinhaTabelaArquivoDeploy;

		// Preenche o template de linha da tabela com os dados do arquivo para deploy
		templateNovaLinhaTabelaArquivoDeploy =
			$jq.formatarStringArrayArguments(templateNovaLinhaTabelaArquivoDeploy,
											linhasArquivosAdicionadosDeploy[i].split(separadorPosicionalCamposArquivosDeploy));

		// Coloca o id da linha no link Editar para identificar a linha que está sendo editada
		$jq("#tabelaArquivosDeploy").append(templateNovaLinhaTabelaArquivoDeploy).find("a#editarArquivoDeployTemplate").attr("id", "editarArquivoDeploy").attr("href", i);
		// Coloca o id da linha no link Excluir para identificar a linha que está sendo excluída
		$jq("#tabelaArquivosDeploy").find("a#excluirArquivoDeployTemplate").attr("id", "excluirArquivoDeploy").attr("href", i);
	}

	// Remove a linha com os campos para adição de arquivos para deploy
	$jq("tr#linhaTabelaCamposAdicionarNovoArquivoDeploy").remove();
	// Apresenta o botão para adição de novos arquivos para deploy
	$jq("a#botaoAddLinhaTabelaNovoArquivosDeploy").show();
	

	$jq("a#editarArquivoDeploy").on("click", function(evt) {
		evt.preventDefault();
		evt.stopPropagation();

		$jq("tr#linhaArquivoDeployAdicionado").remove();
		preencherInformacoesEdicaoArquivoDeploy($jq(this).attr("href"));
	});
	

	$jq("a#excluirArquivoDeploy").on("click", function(evt) {
		evt.preventDefault();
		evt.stopPropagation();

		excluirArquivoListaDeploy($jq(this).attr("href"));
	});
}

function preencherInformacoesEdicaoArquivoDeploy(idPosicaoArquivoDeployAtualizado) {
	
	var dadosArquivosDeployCadastrados = $jq(seletorTextoArquivosDeploy).val().split(separadorPosicionalLinhasArquivosDeploy);
	
	// Itera pelas linhas para apresentar na tabela
	for (var i = 0; i < dadosArquivosDeployCadastrados.length; i++) {
		
		var templateNovaLinhaTabelaArquivoDeploy = templateLinhaTabelaArquivoDeploy;
		
		if (i == idPosicaoArquivoDeployAtualizado) {
			$jq("#tabelaArquivosDeploy").append(linhaTabelaCamposEditarArquivoDeploy);
			
			var dadosParaAtualizacaoArquivoDeploy = dadosArquivosDeployCadastrados[i].split(separadorPosicionalCamposArquivosDeploy);
			
			$jq("#textoNomeArtefato").val(dadosParaAtualizacaoArquivoDeploy[0]);
			$jq("#comboTipoDeploy").val(dadosParaAtualizacaoArquivoDeploy[1]);
			$jq("#textoDotNotation").val(dadosParaAtualizacaoArquivoDeploy[2]);
			$jq("#textoVersao").val(dadosParaAtualizacaoArquivoDeploy[3]);
			$jq("#textoUrlStarTeam").val(dadosParaAtualizacaoArquivoDeploy[4]);
			
			// Esconde o botão que adiciona a linha com os campos para preenchimento dos dados do arquivo para deploy
			$jq("a#botaoAddLinhaTabelaNovoArquivosDeploy").hide();
		} else {
			// Preenche o template de linha da tabela com os dados do arquivo para deploy
			templateNovaLinhaTabelaArquivoDeploy =
				$jq.formatarStringArrayArguments(templateNovaLinhaTabelaArquivoDeploy, 
						dadosArquivosDeployCadastrados[i].split(separadorPosicionalCamposArquivosDeploy));
			
			$jq("#tabelaArquivosDeploy").append(templateNovaLinhaTabelaArquivoDeploy).find("a#editarArquivoDeployTemplate").attr("id", "editarArquivoDeploy").attr("href", i);
		}
	}

	$jq("a#linkEditarArquivoDeploy").on("click", function(evt) {
		evt.preventDefault();
		evt.stopPropagation();
		
		var dadoAtualizadoArquivoDeploy = $jq("#textoNomeArtefato").val() + separadorPosicionalCamposArquivosDeploy +
		$jq("#comboTipoDeploy").valorSelecionado() + separadorPosicionalCamposArquivosDeploy +
		$jq("#textoDotNotation").val() + separadorPosicionalCamposArquivosDeploy +
		$jq("#textoVersao").val() + separadorPosicionalCamposArquivosDeploy +
		$jq("#textoUrlStarTeam").val();
		
		//console.log(dadoAtualizadoArquivoDeploy);
		
		salvarInformacoesArquivoDeployAtualizadas(idPosicaoArquivoDeployAtualizado, dadoAtualizadoArquivoDeploy);
	});
}

function salvarInformacoesArquivoDeployAtualizadas(idPosicaoArquivoDeployAtualizado, dadoAtualizadoArquivoDeploy) {
	
	var dadosArquivosDeployCadastrados = $jq(seletorTextoArquivosDeploy).val().split(separadorPosicionalLinhasArquivosDeploy);
	dadosArquivosDeployCadastrados[idPosicaoArquivoDeployAtualizado] = dadoAtualizadoArquivoDeploy;
	
	$jq(seletorTextoArquivosDeploy).val("");
	for (var i = 0; i < dadosArquivosDeployCadastrados.length; i++) {
		$jq(seletorTextoArquivosDeploy).val($jq(seletorTextoArquivosDeploy).val()
				+ dadosArquivosDeployCadastrados[i]
				+ separadorPosicionalLinhasArquivosDeploy);
	}
	
	if ($jq(seletorTextoArquivosDeploy).val().charAt($jq(seletorTextoArquivosDeploy).val().length-1) == separadorPosicionalLinhasArquivosDeploy) {
		$jq(seletorTextoArquivosDeploy).val($jq(seletorTextoArquivosDeploy).val().removeCharAt($jq(seletorTextoArquivosDeploy).val().length-1));
	}
	
	$jq("tr#linhaArquivoDeployAdicionado, tr#linhaTabelaCamposEditarArquivoDeploy").remove();
	apresentarLinhasTabelaArquivosDeployCadastrados($jq(seletorTextoArquivosDeploy).val());
}


function excluirArquivoListaDeploy(idPosicaoArquivoDeployAtualizado) {
	
	var dadosArquivosDeployCadastrados = $jq(seletorTextoArquivosDeploy).val().split(separadorPosicionalLinhasArquivosDeploy);
	
	$jq(seletorTextoArquivosDeploy).val("");
	for (var i = 0; i < dadosArquivosDeployCadastrados.length; i++) {
		
		if (i != idPosicaoArquivoDeployAtualizado) {
			$jq(seletorTextoArquivosDeploy).val($jq(seletorTextoArquivosDeploy).val()
					+ dadosArquivosDeployCadastrados[i]
					+ separadorPosicionalLinhasArquivosDeploy);
		}
	}
	
	if ($jq(seletorTextoArquivosDeploy).val().charAt($jq(seletorTextoArquivosDeploy).val().length-1) == separadorPosicionalLinhasArquivosDeploy) {
		$jq(seletorTextoArquivosDeploy).val($jq(seletorTextoArquivosDeploy).val().removeCharAt($jq(seletorTextoArquivosDeploy).val().length-1));
	}
	
	$jq("tr#linhaArquivoDeployAdicionado").remove();
	apresentarLinhasTabelaArquivosDeployCadastrados($jq(seletorTextoArquivosDeploy).val());
	
}